package com.cloud.generic;

import com.cloud.bean.Entity;

import java.util.ArrayList;
import java.util.List;

/**
 * 泛型测试
 */
public class GenericTest {

    //泛型方法
    public static <T> T genericMethod(T t) {
        System.out.println(t.getClass());
        System.out.println(t);
        return t;
    }

    //泛型通配符作为形参
    public static void wildCardMethod(ArrayList<?> list) {
        System.out.println(list);
    }

    public static void main(String[] args) {
        //未作限定的情况下可以放入任何对象类型
        List list = new ArrayList();

        //jdk1.5之后

        //不会报错
        List listStr = new ArrayList<String>();
        listStr.add(new Integer(123));

        //限定了String类型，放入其他类型的对象会编译报错
        List<String> listStr1 = new ArrayList<>();

        //测试泛型方法
        genericMethod(new Entity("1", "shuchuanbiao"));

        //泛型通配符? 左边写<?> 右边的泛型可以是任意类型，jdk1.7后右边的泛型可以省略
        //通过通配符形参，可以将不同的泛型类型实参，传入方法
        ArrayList<?> list1 = new ArrayList<Object>();
        ArrayList<?> list2 = new ArrayList<String>();
        ArrayList<?> list3 = new ArrayList<Integer>();
        ArrayList list4 = new ArrayList<Integer>();

        //编译报错
//        list2.add("123");
        list4.add("123");

        wildCardMethod(list2);
        wildCardMethod(list3);
    }
}
